package Algorithm.hot;

import java.util.HashSet;

public class hot003 {

//   3. 无重复字符的最长子串
//    给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。

//滑动窗口
public int lengthOfLongestSubstring1(String s) {
    //哈希集合，记录每个字符是否出现过
    HashSet<Character> occ = new HashSet<>();
    int n=s.length();
    //右指针，初始值为-1，相当于我们在字符串的左边界的左侧，还没有开始移动
    int rk=-1,ans=0;
    for (int i = 0; i < n; i++) {
        if (i!=0) {
            //左指针向右移动一格，移动一个字符
            occ.remove(s.charAt(i-1));
        }
        while (rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
            //不断地移动右指针
            occ.add(s.charAt(rk+1));
            ++rk;
        }
        //第i到rk个字符是一个极长的无重复字符字串
        ans=Math.max(ans,rk-i+1);
    }
return ans;

}



//暴力解法 O(n3)
    public int lengthOfLongestSubstring2(String s) {
return -1;
    }
}
